package cn.kent.factoryMethodPattern;

import java.util.List;
import java.util.Random;

/**
 * 八卦炉，烤箱，造人机器
 *
 * @author kent
 * @date 2021/5/8 14:52
 */
public class HumanFactory {
    /**
     * 定一个烤箱, 泥巴塞进去，人就出来了。
     *
     * @param c class
     * @return human接口实现类
     */
    public static Human createHuman(Class c) {
        // 定义一个类型的人类
        Human human = null;

        try {
            // 产生一个人种
            human = (Human) Class.forName(c.getName()).newInstance();
        } catch (InstantiationException e) {
            //你要是不说个人种颜色的话，没法烤，要白的黑的，你说话了才好烤
            System.out.println("必须指定人种的颜色");
        } catch (IllegalAccessException e) {
            //定义的人种有问题，那就烤不出来了，这是...
            System.out.println("人种定义错误");
        } catch (ClassNotFoundException e) {
            //你随便说个人种，我到哪里给你制造去？！
            System.out.println("混蛋，你指定的人种找不到!");
        }
        return human;
    }

    public static Human createHuman(){
        // 定义一个类型的人类
        Human human = null;

        // 定义了多少人种
        List<Class> concreteHumanList = ClassUtils.getAllClassByInterface(Human.class);
        // 八卦炉想烧成啥人就烧成啥人
        Random random = new Random();
        int rand = random.nextInt(concreteHumanList.size());
        human = createHuman(concreteHumanList.get(rand));

        return human;
    }
}
